import express  from 'express'  //  webpack可以把es6语法编译成es5,就可以使用这种方式导入
import {render} from './utils'
import {getStore} from '../store'
import { matchRoutes } from 'react-router-config'
import routes from '../Routes'
const app = express();

app.use(express.static('public'))

app.get('*', function (req, res) {
  const store = getStore()
    //  如果在这里，能够拿到异步数据，并填充到store之中
  //  store里面到底填充什么，我们不知道，我们需要结合当前用户请求地址和路由做判断
  //  如果用户访问 / 路径,我们就拿login组件异步数据

  //  根据路由的路径，来往store里面加数据
  const matchedRoutes = matchRoutes(routes,req.path);  //  多级路由的嵌套
  // console.log(matchedRoutes)  打印匹配的路由信息
  //  让matchRoutes里面所有的组件，对应的loadData方法执行一次，把loadData的方法数据放在store
  const promises = [];
  // 异步数据
  matchedRoutes.forEach(item=>{
    if(item.route.loadData){
      promises.push(item.route.loadData(store))
    } 
  })

   //  等上面执行完的所有promise在执行下面的代码
   Promise.all(promises).then(()=>{ 
      res.send(render(req,store,routes))
    })

 
});

app.listen(3000, function () {
  console.log('Example app listening on port 3000!');
});